﻿/*************************************************************************************
 *
 * 文 件 名:   PacketInfo
 * 描    述:   数据包信息
 * 
 * 版    本：  V1.0
 * 创 建 者：  ysw 
 * 创建时间：  2021/9/8 8:20:00
 * ======================================
 * 历史更新记录
 * 版本：V          修改时间：         修改人：
 * 修改内容：
 * ======================================
*************************************************************************************/

using CommonModel.Model;
using CommonModel.Util;
using System;
using System.Collections.Generic;

namespace GXRTBTC.PublicClassLibrary
{
    /// <summary>
    /// 数据包信息
    /// </summary>
    public class PacketInfo
    {
        /// <summary>
        /// 数据包唯一key
        /// </summary>
        public string pack_key { get; set; } = TransForm.DateTimeFormat(DateTime.Now, "yyyyMMddHHmmssfffffff");
        /// <summary>
        /// 设备IP地址
        /// </summary>
        public string ip { get; set; } = "";
        /// <summary>
        /// 设备端口
        /// </summary>
        public ushort port { get; set; } = 0;
        //以下时间的属性名称，为了方便查看，属性长度强制统一
        /// <summary>
        /// 接收时间
        /// </summary>
        public DateTime receivingTime { get; set; }
        /// <summary>
        /// 接收提交开始时间
        /// </summary>
        public DateTime receivPutTime { get; set; }
        /// <summary>
        /// 包数量
        /// </summary>
        public string rcvPacketNum { get; set; } = "0";
        /// <summary>
        /// 数据获取时间
        /// </summary>
        public DateTime headerGetTime { get; set; }
        /// <summary>
        /// 设备类型，即帧头解析完成时间
        /// </summary>
        public DateTime headAnalyTime { get; set; }
        /// <summary>
        /// 帧头解析提交时间
        /// </summary>
        public DateTime headerPutTime { get; set; }
        /// <summary>
        /// 帧头提交时Kafka记录的时间
        /// </summary>
        public DateTime dataKafkaTime { get; set; }
        /// <summary>
        /// 帧体解析接收时间
        /// </summary>
        public DateTime cjDataGetTime { get; set; }
        /// <summary>
        /// 帧体解析完成时间
        /// </summary>
        public DateTime cjDataAnaTime { get; set; }
        /// <summary>
        /// 帧体解析提交时间
        /// </summary>
        public DateTime cjDataPutTime { get; set; }
        public DateTime cachKafkaTime { get; set; }
        /// <summary>
        /// 数据最终写缓存的时间
        /// </summary>
        public DateTime dataCacheTime { get; set; }
        /// <summary>
        /// 设备序列号
        /// </summary>
        public string seviceSN { get; set; } = "";
        /// <summary>
        /// 
        /// </summary>
        public string receiveNode { get; set; } = "";
        /// <summary>
        /// 采集节点编号
        /// </summary>
        public string receiveNo { get; set; } = "";
        /// <summary>
        /// 采集时，当前包所有条目数
        /// 帧头解析节点编号
        /// </summary>
        public string headNode { get; set; } = "";
        /// <summary>
        /// 帧体解析节点编号
        /// </summary>
        public string bodyNode { get; set; } = "";
        /// <summary>
        /// 设备类型
        /// </summary>
        public string deviceType 
        {
            get 
            {
                return header == null ? "" : header.device;
            }
            set
            {
                if (header != null)
                {
                    header.device = value;
                }
            }
        }
        /// <summary>
        /// 20211018 ysw 新增
        /// 工位号
        /// </summary>
        public string positionId { get; set; } = "";
        /// <summary>
        /// 台站编码
        /// </summary>
        public string stationCode { get; set; } = "";
        /// <summary>
        /// 台站级别
        /// </summary>
        public string stationLevel { get; set; } = "";
        /// <summary>
        /// 数据类型，默认0
        /// 0-普通数据，需要配置解析配置数据
        /// 1-json数据，收到的就是json数据
        /// 2-AI地数图像识别
        /// 3-新远场xml数据
        /// 4-从https获取的新监控系统WEB API接口协议数据
        /// 5-从websocket获取的新监控系统WEB API接口协议数据
        /// 6-新监控系统WEB API接口协议补推的数据，数据只用于历史数据服务，最终存储到历史表
        /// 用于区分是否json（目前只有信源数据是json）数据
        /// 20220906 ysw 新增dataType
        /// </summary>
        private string _dataType { get; set; } = "0";
        public string dataType
        {
            get
            {
                return _dataType ?? "0";
            }
            set
            {
                _dataType = value;
            }
        }
        /// <summary>
        /// 数据内容
        /// </summary>
        public string reviceDatas { get; set; } = "";
        /// <summary>
        /// 错误等提示信息记录
        /// </summary>
        public string tipMsg { get; set; } = "";
        /// <summary>
        /// 数据头信息
        /// </summary>
        public HeaderData header { get; set; } = null;
        /// <summary>
        /// 解析后数据
        /// </summary>
        public Dictionary<string, object> structData { get; set; } = null;
        /// <summary>
        /// structData对应要写入redis缓存的数据
        /// 目前只有dataType为0时有效
        /// </summary>
        public Dictionary<string, string> dictData { get; set; } = null;
    }
}
